#include <iostream>
#include <string>
#include <fstream>
#include "xlsxwriter.h"

using namespace std;

/*
根据自己的业务需求和AI结合写的一个 简单vsc转exvel
*/

//csv 解析函数
vector<string> parseCsvLine(const string& line) {
    vector<string> fields;
    string field;
    bool inQuotes = false;

    for(char c : line) {
        if (c == '"'){
            // 处理转译两个双引号转换为一个双引号
            if (inQuotes && !field.empty() && field.back() == '"') {
                field.back() = '"';
            }else {
                inQuotes = !inQuotes;
            }
        }else if (c == ',' && !inQuotes)
        {
            // 未再引号3内的 ， 分割字段
            fields.push_back(field);
            field.clear();
        }else {
            field += c;
        }
    }
    fields.push_back(field);
    return fields;
}

int main () {
    // 配置输入输出
    string csvFile = "/Users/ayer/Desktop/cprimer-plus/Leanrn/20250210.csv";
    string xlsxFile = "/Users/ayer/Desktop/cprimer-plus/Leanrn/20250210.xlsx";
    
    // 创建Excel工作簿和工作表
    lxw_workbook* workbook = workbook_new(xlsxFile.c_str());
    lxw_worksheet* worksheet = workbook_add_worksheet(workbook, NULL);

    // 打开CSV文件
    ifstream file(csvFile);
    if (!file.is_open()) {
        cerr << "无法打开CSV文件" << csvFile << endl;
        return 1;
    }

    string Line;
    int row = 0;
    while (getline(file,Line)){
        // 解析csv行
        vector<string> fields = parseCsvLine(Line);
        // 写入Excel行
        for (int col=0; col < fields.size(); ++col) {
            worksheet_write_string(worksheet, row, col, fields[col].c_str(), NULL);
        }
        row ++;
    }
    // 关闭并保存Excel文件
    workbook_close(workbook);
    file.close();

    cout << "转换完成， 输出文件：" << xlsxFile << endl;
    return 0;
}